package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/second-largest-digit-in-a-string/'>字符串中第二大的数字(Second Largest Digit in a String)</a>
 * <p>给你一个混合字符串 s ，请你返回 s 中 第二大 的数字，如果不存在第二大的数字，请你返回 -1 。</p>
 * <p>混合字符串 由小写英文字母和数字组成。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：s = "dfa12321afd"
 *      输出：2
 *      解释：出现在 s 中的数字包括 [1, 2, 3] 。第二大的数字是 2 。
 *
 * 示例 2：
 *      输入：s = "abc1111"
 *      输出：-1
 *      解释：出现在 s 中的数字只包含 [1] 。没有第二大的数字。
 * </pre>
 * </p>
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= s.length <= 500</li>
 *     <li>s 只包含小写英文字母和（或）数字。</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/18 14:45
 */
public class LC1796SecondLargestDigitInAString_S {
    static class Solution {
        public int secondHighest(String s) {
            if (s.length() <= 1) {
                return -1;
            }
            // 最大值
            int firstMax = -1;
            // 第二大的值
            int secondMax = -1;
            for (char currCh : s.toCharArray()) {
                // 如果是数字
                if (isDigit(currCh)) {
                    int value = currCh - '0';
                    if (value > firstMax) {
                        secondMax = firstMax;
                        firstMax = value;
                    } else if (value > secondMax && value < firstMax) {
                        secondMax = value;
                    }
                }
            }
            return secondMax;
        }

        private boolean isDigit(char ch) {
            return ch >= '0' && ch <= '9';
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.secondHighest("dfa12321afd"));
        System.out.println(solution.secondHighest("abc1111"));
    }
}
